// import Vue from 'vue';
import TIM from 'tim-js-sdk';
import store from '@/store'
// import TIMUploadPlugin from 'tim-upload-plugin';
// const tim = TIM.create({
// 	SDKAppID: '1600069596'
// })
// tim.registerPlugin({
// 	'tim-upload-plugin': TIMUploadPlugin
// });
// uni.$tim = tim
// uni.TIM = TIM 
let   tim =null
class TimChat {
	constructor(arg) {
		tim= uni.TUIChatKit.chat
		console.log(tim)
		this.init()
		console.log("加入tim");
	}

	init() {
		console.log('tim init')
		// SDK 进入 ready 状态时触发，接入侧监听此事件，然后可调用 SDK 发送消息等API，使用 SDK 的各项功能
		tim.on(TIM.EVENT.SDK_READY, this.onReadyStateUpdate, this)
		// SDK 进入 not ready 状态时触发，此时接入侧将无法使用 SDK 发送消息等功能。
		// 如果想恢复使用，接入侧需调用 login 接口，驱动 SDK 进入 ready 状态
		tim.on(TIM.EVENT.SDK_NOT_READY, this.onReadyStateUpdate, this)
		// 用户被踢下线时触发
		tim.on(TIM.EVENT.KICKED_OUT, this.kickOut, this)
		// 出错统一处理
		tim.on(TIM.EVENT.ERROR, this.onError, this)
		// SDK 收到推送的单聊、群聊、群提示、群系统通知的新消息，可通过遍历 event.data 获取消息列表数据并渲染到页面
		tim.on(TIM.EVENT.MESSAGE_RECEIVED, this.messageReceived, this)
		// 会话列表更新，event.data 是包含 Conversation 对象的数组
		tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, this.convListUpdate, this)
		// SDK 群组列表更新时触发，可通过遍历 event.data 获取群组列表数据并渲染到页面
		tim.on(TIM.EVENT.GROUP_LIST_UPDATED, this.groupListUpdate, this)
		// SDK 黑名单列表更新时触发
		tim.on(TIM.EVENT.BLACKLIST_UPDATED, this.blackListUpdate, this)
		// 网络状态发生改变
		tim.on(TIM.EVENT.NET_STATE_CHANGE, this.netStateChange, this)
		// SDK 收到对端已读消息的通知，即已读回执。可通过遍历 event.data 获取对端已读的消息列表数据并渲染到页面，如单聊会话内可将己方发送的消息由“未读”状态改为“已读”。
		tim.on(TIM.EVENT.MESSAGE_READ_BY_PEER, this.onMessageReadByPeer)
	}

	onReadyStateUpdate({
		name
	}) {
		console.log('tim onReadyStateUpdate', name);
		const isSDKReady = (name === TIM.EVENT.SDK_READY)
		store.commit('global/setSdkReady', isSDKReady)
		if (isSDKReady) {
			if (uni.getStorageSync('userInfo')) {
				const userInfo = uni.getStorageSync('userInfo')
				tim.updateMyProfile({
					nick: userInfo.nickname,
					avatar: userInfo.avatar
				})
			}

		}

	}

	messageReceived(event) {
		this.playTipsAudio()
		store.dispatch('conversation/onMessageEvent', event)
		uni.$emit('messageReceived')
		event.data.forEach(item => {
			if (item.type === TIM.TYPES.MSG_GRP_TIP) {
				if (item.payload.operationType) {
					uni.$emit('groupNameUpdate', item.payload)
				}
			}
			if(item.conversationID=="GROUP@TGS#aUNZNT3PT"){
				uni.$emit("onGroupMsg",item)
			}
			if (item.type === TIM.TYPES.MSG_CUSTOM) {
			
			}
		})
	}


	kickOut(event) {
		console.log('tim kickOut', event);
		store.dispatch('global/resetStore')
		uni.showToast({
			title: '你已被踢下线',
			icon: 'none',
			duration: 1500,
			success: () => {
				store.dispatch('logout', true)
			}
		})
	}

	onError(event) {
		console.log('tim onError', event);
		// 网络错误不弹toast && sdk未初始化完全报错
		if (event.data.message && event.data.code && event.data.code !== 2800 && event.data.code !== 2999) {
			store.commit('showToast', {
				title: event.data.message,
				duration: 2000
			})
		}
	}

	netStateChange(event) {
		console.log('tim netStateChange', event);
		const payload = this.checkoutNetState(event.data.state)
		uni.showToast({
			title: payload.title,
			icon: payload.icon || 'none',
			duration: payload.duration || 800
		})
	}

	checkoutNetState(state) {
		console.log('tim checkoutNetState', state);
		switch (state) {
			case TIM.TYPES.NET_STATE_CONNECTED:
				return {
					title: '已接入网络', duration: 2000
				}
				case TIM.TYPES.NET_STATE_CONNECTING:
					return {
						title: '当前网络不稳定', duration: 2000
					}
					case TIM.TYPES.NET_STATE_DISCONNECTED:
						return {
							title: '当前网络不可用', duration: 2000
						}
						default:
							return ''
		}
	}
	convListUpdate(event) {
		console.log('tim convListUpdate', event);
		// store.commit('conversation/updateAllConversation', event.data)
	}

	onMessageReadByPeer(event) {
		console.log('tim onMessageReadByPeer', event);
		console.log(event)
	}

	blackListUpdate(event) {
		// store.commit('conversation/updateBlacklist', event.data)
	}

	groupListUpdate(event) {
		// store.commit('conversation/updateGroupList', event.data)
	}

	playTipsAudio() {
		console.log('tim playTipsAudio');
		const innerAudioContext = uni.createInnerAudioContext();
		innerAudioContext.autoplay = true;
		innerAudioContext.src = '/static/audio/tips.mp3';
		innerAudioContext.onEnded(() => {
			innerAudioContext.destroy();
		});
	}

}

export default TimChat
